# 用户密码复杂度验证(封装成函数)
#
# 长度超过8位(必须)
#
# 包括大、小写字母数字其它符号,以上四种至少三种
#
# 不能有长度超过或等于3的子串重复
#
# 密码的评分等级,默认2分,以上条件满足一条加1分
#
# 返回密码的评分等级，及要改进的点:

# 如return 3, [长度小于8', '密码没有由3种以上字符组成]

#判断密码长度
def passwd_complex0(user_passwd0):
    grade=0
    if len(user_passwd0) >=8:
        grade += 1
        # print("设置密码至少八位！")
    else: pass
    return grade

#判断包括大、小写字母数字其它符号,以上四种至少三种
def passwd_complex1(user_passwd):
        result = [0, 0, 0, 0]
        for i in user_passwd:
            # sum()内酯函数，对数列进行求和运算，满足3种即可
            if sum(result) >= 3:
                break
            # 大、小写字母数字其它符号判断
            else:
                if 'a' <= i <= 'z':
                    result[0] = 1
                elif 'A' <= i <= 'Z':
                    result[1] = 1
                elif '0' <= i <= '9':
                    result[2] = 1
                else:
                    result[3] = 1
        return result

#连续三个一样的字符串判定
def passwd_complex2(user_passed1):
    grade1=0
    for i in range(len(user_passed1)):
        sub=user_passed1[i]
        if user_passed1.count(sub,i,i+3)>=3:
           #print("不能有长度超过或等于3的子串重复")
           break
        else: grade1+=1
    return  grade1
#主函数
passwd=input("请输入密码:")
grade=2
advice=[]
grade0=passwd_complex0(passwd)
result=passwd_complex1(passwd)
grade2=passwd_complex2(passwd)
if grade0==1:
    grade += 1
else:advice.append("密码小于八位!")

if grade2!=1:  #为什么不能写grade2==1
    grade +=1
else:advice.append("不能有长度超过或等于3的子串重复")

if sum(result)>3:
    grade+=1
else: advice.append("包括大、小写字母数字其它符号,以上四种至少三种")
print(f"密码等级为：{grade},{advice}")








